"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/3/19 8:41
@Description :  群聊天室客户端
1.抽取类  客户端类
    1.1属性    socket    port  ip
    1.2操作    发送信息  接收信息
"""
import socket
import threading


class ChatClient:
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port
        # 创建客户端的socket的对象  用于 发送信息  接收信息
        self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.client_socket.connect((self.ip, self.port))
        print('客户端启动成功,可以开始聊天了...')

    # 发送信息
    def send_message(self):
        while True:
            user_input = input(">")
            if user_input == 'exit':
                break
            if user_input:
                self.client_socket.send(user_input.encode('utf-8'))
            else:
                continue
        # 释放资源
        self.client_socket.close()

    # 接收信息
    def receive_message(self):
        try:
            while True:
                other_info = self.client_socket.recv(1024).decode('utf-8')
                print("收到信息:", other_info)
        except ConnectionResetError as e:
            print(f'服务器异常:{e}')
        except ConnectionAbortedError as e:
            print('已退出聊天室...')

    # 启动客户端
    def start_client(self):
        # 开启线程  发送消息
        threading.Thread(target=self.send_message).start()
        # 开启线程  接收消息
        threading.Thread(target=self.receive_message).start()


if __name__ == '__main__':
    try:
        chat_client = ChatClient('127.0.0.1', 9999)
        chat_client.start_client()
    except ConnectionRefusedError as e:
        print('客户端连接服务器失败,请重试...')
